// page_manager.c
#include "page_manager.h"

static PageDescriptor currentPage;       // 当前页面
static PageDescriptor* allPages = NULL;  // 页面列表指针
static uint8_t pageCount = 0;            // 页面总数

// 初始化页面管理器（注册页面列表）
void PageManager_Init(PageDescriptor* pages, uint8_t count) {
    allPages = pages;
    pageCount = count;
    currentPage.pageId = 0xFF;  // 初始无页面
}

// 切换页面（根据PageID）
void PageManager_SwitchPage(uint8_t pageId) {
    // 检查参数合法性
    if (allPages == NULL || pageCount == 0) {
        return;
    }

    // 检查页面合法性
    for (uint8_t i = 0; i < pageCount; i++) {
        if (allPages[i].pageId == pageId) {
            // 保存当前页面ID
            uint8_t oldPageId = currentPage.pageId;
            
            // 更新页面信息
            currentPage = allPages[i];
            
            // 显示新页面
            if (currentPage.displayFunc != NULL) {
                currentPage.displayFunc();
            }
            
            return;
        }
    }

    // 页面不存在且不是主页面，尝试切换到主页面
    if (pageId != 0) {
        return PageManager_SwitchPage(0);
    }
}

// 分发事件到当前页面
void PageManager_DispatchEvent(PageEvent event, PageParam* param) {
    if (currentPage.eventHandler != NULL) {
        currentPage.eventHandler(event, param);  // 调用页面事件处理函数
    }
}

// 获取当前页面ID
uint8_t PageManager_GetCurrentPageId() {
    return currentPage.pageId;
}